#include<iostream>
#include<cstring>
using namespace std;

char a[50000][20],tp[10],cp[10];

void find(char * c,int pos){
    
}


int main()
{
    int N,spl,count=0,pos;
    scanf("%d",&N);
    if (N>30||N<10)putchar('0');
    if (N==10)puts("1 1 1 1 1 1 1 1 1 1");
    spl=N-10;
    memset(tp,'1',sizeof(tp));

    // for (int i=0 , pos=9; pos>=0;pos--)
    // {
    //     ++i;
    //     if(++tp[pos]=='3' && i<spl){
    //         if(pos<8 && tp[pos+1]==3) pos--;
    //         else pos++;
    //     }
    //     if (i==spl)
    //     {
    //         sprintf(a[count],"%c %c %c %c %c %c %c %c %c %c\n",
    //         tp[0],tp[1],tp[2],tp[3],tp[4],tp[5],tp[6],tp[7],tp[8],tp[9]);
    //         count++;
    //         i=0;
    //         memset(tp,'1',sizeof(tp));
    //     }
    // }

    int curpos = 9,all,pose;
    while (curpos!=-1)
    {
        all = 0;
        memset(tp,'1',sizeof(tp));

        while (tp[curpos]<='3')
        {
            pose = 9;
            strcpy(cp,tp);
            // while (pose>=curpos)
            // {
            //     if (++all < spl && cp[curpos]<='2')
            //     {
            //         ++cp[curpos];
            //     }
            //     if (all==spl)
            //     {
            //         sprintf(a[count],"%c %c %c %c %c %c %c %c %c %c\n",
            //         cp[0],cp[1],cp[2],cp[3],cp[4],cp[5],cp[6],cp[7],cp[8],cp[9]);
            //         count++;
            //     }
            //     pose--;
            // }
            tp[curpos]++;

        }
        curpos--;
    }
    
    
    printf("%d\n%s",count,a);
    
    return 0;
}
